package com.wonders.hisdoctor.station.project.medicine.service;

import com.wonders.his.common.service.project.base.domain.AppBaseParam;
import com.wonders.hisdoctor.station.project.base.domain.OutpPresc;
import com.wonders.hisdoctor.station.project.hisqueue.vo.ClinicMasterQueryVo;
import com.wonders.hisdoctor.station.project.medicine.vo.*;
import com.wonders.hisdoctor.station.project.record.vo.*;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author 张澎_9970
 * @date 2021/1/20 15:32 星期三
 * @desc: 门诊用药_service
 */
public interface MedicineService {

    /**
     * 新增
     *
     * @param medicineVo 门诊用药_VO
     * @return int
     */
    int save(MedicineVO medicineVo);

    /**
     * 查询 处方及明细
     *
     * @param patientId 病人ID
     * @param visitDate 就诊日期
     * @param visitNo   就诊序号
     * @param empNo     医生编号
     * @return List<OutpOrders>
     */
    List<PrescriptionVO> queryPrescriptions(String patientId, Date visitDate, Integer visitNo, String empNo, Integer isHistory);

    /**
     * Description: 医嘱名称下拉列表
     * Param: [drugListRequest]
     * return: java.util.List<com.wonders.hisdoctor.station.project.record.vo.DrugListVo>
     * Author: tong-aj
     * Date: 2021/3/5
     */
    List<DrugListVo> drugList(DrugListRequest drugListRequest);

    /**
     * 批量删除
     *
     * @param outpPrescs 处方明细表
     * @return int
     */
    int deleteBatch(List<OutpPresc> outpPrescs);

    /**
    * Description: 打印接口
    * Param: [medicinePrintRequest, request]
    * return: com.wonders.hisdoctor.station.project.medicine.vo.PrintVo
    * Author: tong-aj
    * Date: 2021/4/15
    */
    PrintVo print(MedicinePrintRequest medicinePrintRequest);

    /**
     * 耗材下拉框
     *
     * @param drugName     耗材名称
     * @param hospitalCode 机构代码
     * @param type         药品类型
     * @return List<SuppliesVo>
     */
    List<SuppliesVo> supplies(String drugName, String hospitalCode, String type);

    /**
     * 引用处方_左列表
     *
     * @param empNo     人员编号
     * @param patName   患者姓名
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return List<QuotePrescLeftVo>
     */
    List<QuotePrescLeftVo> quotePrescLeft(String empNo, String patName, Date startDate, Date endDate);

    /**
     * 引用处方_右列表
     *
     * @param empNo     人员编号
     * @param patName   患者姓名
     * @param visitDate 就诊日期
     * @return List<OutpPresc>
     */
    List<QuotePrescVo> quotePrescription(String empNo, String patName, Date visitDate);


    /**
     * 治疗单打印
     *
     * @param treatPrintVo 门诊药物治疗单打印_入参_VO
     * @return DrugTreatPrintVo
     */
    DrugTreatPrintVo drugTreatPrint(TreatPrintVo treatPrintVo);

    /**
     * 取消成组
     *
     * @param compPkVos 入参
     * @return Integer
     */
    Integer ungroup(List<CompPkVo> compPkVos);

    /**
     * 确认转方_校验
     *
     * @param quotePrescVos
     * @param patientId
     * @return
     */
    CipherQuoteVO checkPresc(List<QuotePrescVo> quotePrescVos, String patientId);

    /**
     *
     * @param qryPresVO
     * @return
     */
    List<PrescriptionVO> qryPres(QryPresVO qryPresVO);

    List<ClinicMasterQueryVo> qryClinic(QryClinicVO qryClinicVO);

    /**
     * 根据机构，查询处方开药时，是否允许重复开药
     * @param orgId
     * @return
     */
    AppBaseParam medicineRepeatable(String orgId);

    /**
     * 输液单打印
     * @param request
     * @return
     */
    TransfusionVo getTransfusion(TransfusionRequest request);

    /**
     * 用量配置
     * @param hospitalCode 机构代码
     * @return String
     */
    DosageConfigVO dosageConfig(String hospitalCode);

    /**
     * 根据剂型获取给药方式
     * @param drugCode 药品代码
     * @return
     */
    Map<String, String> getAdminByForm(String drugCode, String drugSpec);
}
